package Q16_21_Sum_Swap; import java.util.Arrays; import java.util.HashSet; public class QuestionD { public static int sum(int[] array) { int s = 0; for (int a : array) { s += a; } return s; } public static Integer getTarget(int[] array1, int[] array2) { int sum1 = sum(array1); int sum2 = sum(array2); if ((sum1 - sum2) % 2 != 0) return null; return (sum1 - sum2) / 2; } public static int[] findSwapValues(int[] array1, int[] array2) { Integer target = getTarget(array1, array2); if (target == null) return null; return findDifference(array1, array2, target); } public static int[] findDifference(int[] array1, int[] array2, int target) { Arrays.sort(array1); Arrays.sort(array2); int a = 0; int b = 0; while (a < array1.length && b < array2.length) { int difference = array1[a] - array2[b]; /* Compare difference to target. If difference is too small, then * make it bigger by moving a to a bigger value. If it is too big, * then make it smaller by moving b to a bigger value. If it's * just right, return this pair. */ if (difference == target) { int[] values = {array1[a], array2[b]}; return values; } else if (difference < target) { a++; } else { b++; } } return null; } public static void main(String[] args) { int[] array1 = {1, 1, 1, 2, 2, 4}; int[] array2 = {3, 3, 3, 6}; int[] swaps = findSwapValues(array1, array2); if (swaps == null) { System.out.println("null"); } else { System.out.println(swaps[0] + " " + swaps[1]); } } }